package model

import (
	"time"

	"gorm.io/gorm"
)

type RecruitmentStatus int8 // 自定义状态枚举

const (
	StatusHiring RecruitmentStatus = 1 // 招聘中
	StatusPaused RecruitmentStatus = 2 // 已暂停
	StatusClosed RecruitmentStatus = 3 // 已结束
)

type Recruitment struct {
	InfoID         uint              `gorm:"primaryKey;autoIncrement;column:info_id"`         // 主键自增
	Title          string            `gorm:"type:varchar(255);not null"`                      // 标题（非空）
	City           string            `gorm:"type:varchar(20);not null;index:idx_city_status"` // 城市+联合索引
	WorkExperience *string           `gorm:"type:varchar(50)"`                                // 工作年限（指针处理可空）
	SalaryRange    string            `gorm:"type:varchar(50);not null"`                       // 薪资范围
	Department     *string           `gorm:"type:varchar(50)"`                                // 部门（指针处理可空）
	Brief          *string           `gorm:"type:text"`                                       // 职位简介（长文本）
	Details        *string           `gorm:"type:longtext"`                                   // 详细描述（超长文本）
	ContactPerson  string            `gorm:"type:varchar(50);not null"`                       // 实名联系人
	ContactInfo    string            `gorm:"type:varchar(50);not null"`                       // 联系方式（非空）
	PublishTime    time.Time         `gorm:"autoCreateTime"`                                  // 自动填充发布时间
	UserID         uint              `gorm:"index;not null"`                                  // 外键索引
	Status         RecruitmentStatus `gorm:"type:tinyint;default:1;index:idx_city_status"`    // 状态+联合索引
	Deadline       *time.Time        `gorm:"type:date"`                                       // 截止日期（指针处理可空）
	IsDeleted      bool              `gorm:"column:is_deleted;default:false;comment:是否已软删除"`
}

// 自定义表名（遵循蛇形复数规则）
func (Recruitment) TableName() string {
	return "recruitment"
}

// 关联用户方法（需确保 User 模型存在）
func (r *Recruitment) User(db *gorm.DB) (*User, error) {
	var user User
	if err := db.Where("user_id = ?", r.UserID).First(&user).Error; err != nil {
		return nil, err
	}
	return &user, nil
}
